home *** CD-ROM | disk | FTP | other *** search
/ Macwelt 1 / Macwelt DVD 1.toast / Web-Publishing / HTML-Editoren / Alpha ƒ / Help / Bug Reports and Debugging < prev    next >
Encoding:
Text File  |  2000-12-16  |  30.5 KB  |  734 lines

  1. ================================================================================
  2.  
  3.           Bugs and Bug-reports
  4.  
  5. Alpha has a sophisticated bug reporting and tracking system.  Please
  6. use it, since it will help us (and you) to keep track of bugs,
  7. potential workarounds, and when they are finally fixed.  To use the
  8. system, go to
  9.  
  10.     <http://www.maths.mq.edu.au/~steffen/Alpha/bugzilla/>.
  11.     
  12. The Alpha-D mailing list is also a useful venue for discussion
  13. possible problems/workarounds/bugs in Alpha.  However for the highest
  14. likelihood of getting a bug fixed, the bugzilla system should be used.
  15. It maintains a public record of what has been done to fix the problem, and
  16. has mails direct to the Alpha-D list as bugs are reported and fixed.
  17.  
  18. Bugs in Alpha are generally of two types: a problem in Alpha's compiled
  19. C code, or in Alpha's supporting libraries of Tcl code.  The latter can
  20. usually be fixed more easily.  In either case it is essential that you
  21. provide a detailed sequence of actions which can reproduce the problem.
  22. IMPORTANT: For Tcl problems, it is also invaluable to have a 'Stack
  23. Trace'.  In fact, without a 'Stack Trace' it is ALMOST ALWAYS NOT
  24. POSSIBLE to track down problems in Alpha's Tcl code, unless they lead
  25. to very 'visual' problems, or unless you can give extremely precise
  26. instructions on how to reproduce the bug.
  27.  
  28. It is also important to know precisely which version of Alpha (and
  29. AlphaTcl) you are using -- see the Readme, or Changes files for this
  30. information.  It is usually worth checking if there is a newer release
  31. available: the problem may already have been fixed.
  32.  
  33. Also, please try to distinguish between a 'crash' in which the entire
  34. Alpha application quits or your machine locks up, and a more typical
  35. 'bug/failure/error' in which some operation inside Alpha simply doesn't
  36. do what you expected (in the latter case you can always make a stack
  37. trace, in the former that will be quite difficult).
  38.  
  39.            Reporting a bug
  40.  
  41. Here are the steps you need to take to produce a useful bug report:
  42.  
  43. • Try to find a 100% reproducible set of circumstances which show
  44.   up the bug, which hopefully don't depend on your particular
  45.   machine's configuration.
  46. • Does Alpha crash or does Alpha simply do something a little wrong?
  47.   If it crashes, use the bugzilla bug reporting system to enter all
  48.   pertinent information.  The bug will be recorded, and we will try to
  49.   fix it.  On the other hand, if Alpha does not crash, you will have
  50.   to do more to produce the most valuable bug reports, so keep
  51.   reading...
  52. • Do you have the most recent version of Alpha and AlphaTcl, its
  53.   supporting libraries?  If you are using a beta release version,
  54.   you should check <ftp://ftp.ucsd.edu/pub/alpha/PreRelease/> to
  55.   see if a newer version is available.
  56. • Is the bug documented towards the end of this file?  If so it
  57.   is a known bug which will hopefully be fixed in the future.
  58.  
  59. If you got this far, you have the latest release of Alpha(Tcl) and have
  60. a reproducible set of circumstances in which Alpha doesn't do quite
  61. what you want.  Assuming a single action triggered the bug, you will
  62. need to find out what "procedure" that single action is calling, and
  63. then perform a trace on that procedure.  So there are now two steps to
  64. follow:
  65.  
  66. • you need to determine which procedure to trace
  67. • you need to carry out the actual trace.
  68.  
  69.            Which procedure to trace?
  70.  
  71. If a menu-selection causes a problem, then there are three ways you may 
  72. be able to determine which procedure to trace:
  73.  
  74. (i) if the menu item is called 'Cmd Double Click', then the procedure 
  75. is probably called 'cmdDoubleClick' (i.e. scrunch everything together 
  76. and make the first character lower case).
  77.  
  78. (ii) if the menu item has a keyboard shortcut, then use the F7
  79. 'Describe Binding' functionality below to find the procedure.
  80.  
  81. (iii) ask on the Alpha-D mailing list (you should probably also ask to
  82. whom you should send the stack trace when you have it).
  83.  
  84. If the problem occurs with a key-press (say you press 'return' and the
  85. wrong thing happens), then you can find out which procedure is being
  86. activated with the 'Describe Binding (F7)' menu item:
  87.  
  88. (i) hit F7, followed by the offending key-press.  Alpha will give you
  89. the name of the procedure which would be triggered by that key.  
  90.  
  91. Through one of the above steps you will now know the name of the
  92. procedure to trace.  So the next step is...
  93.  
  94.            Performing a stack-trace
  95.  
  96. A stack trace is a detailed list of each internal command called
  97. together with the parameters used for that command, and the results of
  98. the command.  A stack trace records everything that happens inside a
  99. given "procedure", so if that procedure does something wrong, the
  100. stack trace should contain the information to understand the problem, 
  101. and hopefully to fix it.
  102.  
  103. For experienced Tcl programmers, a stack trace usually lets one diagnose
  104. even very subtle problems.  More blatant errors can be diagnosed even
  105. by inexperienced Tcl programmers.  Either way stack traces are a good
  106. way of beginning to understand what goes on in Alpha's internals.
  107.  
  108. The first step is to get access to the suitable debugging commands. 
  109. These are mostly located in the Alpha Developer Menu.  If you debug a 
  110. lot of Tcl code you might have that as a global menu, but if not, the 
  111. easiest way to activate that menu is to open a Tcl shell (in 'Shel'
  112. mode that menu is active by default).  To open a Tcl shell, hit
  113. 'cmd-Y' ('Shell' in the Utils menu).
  114.  
  115. The top few items in the Alpha Developer Menu are for stack traces:
  116.  
  117. (i) select 'Trace Tcl Proc…' from the menu.  
  118. (ii) from the listbox which appears, select the procedure you need
  119. to trace
  120. (iii) now go back to a situation in which the bug occurs and repeat
  121. the action which shows up the bug/causes the problem.
  122. (iv) finally go back to the Tcl shell, and select 'Dump Traces' 
  123. from the Alpha Developer Menu.
  124. (v) mail the resulting window trace dump to the person designated by
  125. the Alpha-D list (usually stack traces are very large, so it is not
  126. nice to mail the whole thing to the list).  If the trace dump is
  127. empty, you probably traced the wrong procedure.  In this case ask
  128. for help on the Alpha-D list.
  129.  
  130. With some errors it may be worth rebuilding your Tcl indices and then 
  131. quitting and restarting Alpha (again use the Alpha Developer menu to do that).
  132.  
  133. Please include the version numbers of Alpha and other packages which you are 
  134. using.  If they are not the latest you should consider upgrading first too.
  135.  
  136.            Other debugging tricks
  137.  
  138. Looking at errorInfo: Sometimes you can get a first estimate at what
  139. went wrong by examining the 'errorInfo' variable which Tcl sets.  If an
  140. action you perform fails, hit 'cmd-Y' to bring up the Tcl shell, and
  141. then type 'set errorInfo' and <return>.  The value of the errorInfo
  142. variable will be dumped into the shell window.  It may help you to
  143. debug things.
  144.  
  145. Automatic shell dumps: The help below tells you how to get a stack
  146. trace under the most general circumstances.  One quick trick you may
  147. try is the following.  Open a Tcl shell (cmd-Y for 'Shell' in the Utils
  148. menu) and then repeat the action which caused the problem.  Some
  149. internal problems are trapped by Alpha and errors dumped to the shell
  150. window if it's open.  If you're lucky, your bug is trapped like that
  151. you'll have the trace to report automatically.
  152.  
  153. ================================================================================
  154.  
  155. More technical debugging information follows:
  156.  
  157.            Using Trace-func
  158.  
  159. Usually it will be easiest to use 'trace tcl proc' and 'dump traces'
  160. from the Alpha Developer Menu, but just in case you want to use the
  161. underlying trace functionality directly, this section describes the Tcl
  162. function-tracing command 'traceFunc'.  traceFunc allows you to trace a
  163. specfic function whenever it is called, sending the output to another
  164. window.  The indented trace of the function includes all parameters,
  165. each argument enclosed within single quotes, as well as the function
  166. result.
  167.  
  168. The syntax of the function is:
  169.  
  170.     traceFunc on <funcName> <winName>
  171.     traceFunc off
  172.     traceFunc status
  173.  
  174. For example, if I want to trace the proc 'nextFunc' (defined in 
  175. procs.tcl), the following might be a log of my activity at the Tcl shell:
  176.  
  177.     Welcome to Alpha's Tcl shell.
  178.     Alpha> traceFunc on nextFunc traceWin
  179.     Alpha> traceFunc status
  180.     Func-tracing on, func: nextFunc, win: traceWin
  181.     Alpha> 
  182.  
  183. Now I create a new window, "dirty" it so that I can get a save dialog, 
  184. and save it as 'traceWin'. Note that tracing is only sent to open 
  185. windows, so I must leave 'traceWin' open.
  186.  
  187. Then I open any random non-C file (because I want the function to fail), go 
  188. to the beginning of the file, and type escape-x 'nextFunc'.  The output 
  189. should look something like the following:
  190.  
  191.     nextFunc 
  192.      searchFunc '1' 
  193.       getPos 
  194.       OK: 38530
  195.       select '38530' 
  196.       OK: 
  197.       saveVars 
  198.       OK: 
  199.       if '(1==1)' '
  200.             nextLine
  201.         ' 'else' '
  202.             previousLine
  203.         ' 
  204.        nextLine 
  205.        OK: 
  206.       OK: 
  207.       getPos 
  208.       OK: 38573
  209.       set 'pos' '38573' 
  210.       OK: 38573
  211.       setVar 'regExpr' '1' 
  212.       OK: 
  213.       setVar 'forward' '1' 
  214.       OK: 
  215.       setVar 'ignoreCase' '1' 
  216.       OK: 
  217.       search '^[^ \t\(#\r/@].*\(.*\)$' '38573' 
  218.       ERROR: Search unsuccessful
  219.      ERROR: Search unsuccessful
  220.     ERROR: Search unsuccessful
  221.  
  222.  
  223. The trace output shows that the problem was an unsuccessful search. In 
  224. this case, a dialog informed us of this fact anyway, but many Alpha 
  225. routines are not as friendly when it comes to error messages.
  226.  
  227.  
  228. Another way to debug Tcl routines is to insert statements that print 
  229. values to another window. For example, one could use the following 
  230. routine: 
  231.  
  232.     proc out args {
  233.         insertText -w "*tcl shell*" $args
  234.     }
  235.  
  236. Whatever you do, don't use 'puts stdout' or 'puts stderr' since these
  237. tend to crash Alpha (hopefully to be fixed at some point...)
  238.  
  239.            Here's some debugging advice from Tom:
  240.  
  241. Hi All,
  242.  
  243. This is so simple that I hesitate to admit that I missed it this long, but
  244. I'll swallow my pride an mention this in case anyone  else has missed this.
  245.  
  246. When you want to get a handle on what a proc is doing, you can use a
  247. combination of the source in one window and the shell in another.
  248.  
  249. First, figure out what values the parameters of the proc would take on in
  250. the case you want to investigate, (perhaps from a trace while running
  251. things normally).
  252.  
  253. Now go to the shell and set variables with the same names as the parameters
  254. to the values you discovered through the trace.
  255.  
  256. Now go to the tcl source file and select a subset of the proc's internal 
  257. code and just load it.
  258.  
  259. After each sucessive part is run you can pop over to the shell and use it
  260. to check out the state of any variable with a simple set statement, or, 
  261. even easier, just cmd-dbl-click or a variable name you want to inspect the 
  262. value of.
  263.  
  264. I've found this real useful for investigating menu routines, you can change
  265. the menu creation string that the proc gave you and just select and reload
  266. it to see if your changes will do what you want.
  267.  
  268. Tom
  269.  
  270. ===============================================================================
  271.  
  272.           Known Bugs
  273.  
  274. (As of Alpha 7.4)
  275.  
  276. These are all bugs with Alpha's internal compiled code, _not_ with the 
  277. Tcl scripts which come with Alpha.  You will have to work around them 
  278. where possible.  
  279.  
  280. ()    Dead-key followed by delete removes several characters.
  281.  
  282. ()    under  MacOS 8 or 9, sometimes when Alpha is already running and you 
  283.     double click on a file in the finder to open Alpha, you can get
  284.     an error -917 (in the finder) and the file isn't opened.  I think
  285.     OS 8 sends a different aevent to an application of it is already
  286.     running, and this may be the problem.
  287.     
  288. ()    If I hit the key equivalent of a menu-item, it is called even if the
  289.     menu item has been disabled.  (This is a MacOS problem and will probably
  290.     never be fixed in Alpha)
  291.     
  292. ()    Multi-line edit boxes in dialogs should allow 'return' to be pressed,
  293.     without triggering the 'OK' button.  Otherwise there is no way to enter
  294.     a return.  (sure you can enter '\r' and have the calling procedure
  295.     manipulate the result, but that's not a good solution; also the above
  296.     is standard MacOS behaviour).
  297.     
  298. ()    gotoTMark often scrolls the window all the way to the top (0), 
  299.     before scrolling back to a TMark!  This gives the window a 
  300.     horrible up/down jerk motion when moving from one TMark to the 
  301.     next.
  302.  
  303. ()  addMenuItem has a bug when given '-l ""' -- see the procedure
  304.     rebuildFtpMenu for an example.  You can workaround it with
  305.     '-l " "' instead.  The problem is with <O being added when it
  306.     should not.
  307.     
  308. ()    'replaceText' on a large block of text which overlaps the top of 
  309.     the window (i.e.  half a big paragraph is off the top of the 
  310.     window, half is still visible, and we now replace the paragraph 
  311.     with some different text) causes a re-draw error in which the 
  312.     replacement text is all drawn in the window (from the top down) 
  313.     when only some of it should be visible.  This gives the illusion of 
  314.     over-writing other stuff in the window.  All is ok if you scroll up 
  315.     and down to refresh.
  316.  
  317.     This is most often manifested when using 'fillParagraph' on a large 
  318.     paragraph which overlaps the top of the window.
  319.     
  320. ()    I tried out Adobe Type Reunion Deluxe 2.0 the other day, and it thinks 
  321.     the 'modes menu' towards the right end of the status bar is a font 
  322.     menu!  Most peculiar.
  323.  
  324. ()  Several people have reported these two problems, but not everyone
  325.     sees them:
  326.     
  327.     >Just a quick note...  I am using 7.0b2 on my 9500/132 and 8100/100AV.  On
  328.     >my 8100, the tear-off menus are chopped off on the right side when you tear
  329.     >them off to stand alone.  This happens on a friend's 8100/80 as well.
  330.     >
  331.     
  332.     I'm using Alpha 6.52 on a Starmax 4100 with 7.6.1 and Aaron and I
  333.     experience the same menu tear-off problem.  I also experienced it with 6.5
  334.     and 6.51 (I think).
  335.     
  336. ===============================================================================
  337.  
  338.           Pseudo-Bugs
  339.  
  340. These are things which Alpha perhaps ought to do, but doesn't and hence
  341. can be considered suggestions for the future or just bugs.
  342.  
  343. ()    Indentation tends to move the current cursor position.  It probably
  344.     shouldn't.
  345.     
  346. ()    The filesets menu 'Hide' menu shows filesets which can't be 
  347.     unhidden, and gives an error message if you try to do that.
  348.     Probably best just to remove them from the menu.
  349.     
  350. ()    The colours Alpha uses are incorrect for 'yellow' and 'cyan'.  You can
  351.     fix them if you want using 'config->redefine colors'.
  352.  
  353. ()    If you use 'killWindow' from within an 'openHook' proc, Alpha will
  354.     often crash (MacsBug tells you it's in 'rowColToPos' or some such proc).
  355.     There's no way to abort the open window from within that proc that
  356.     seems to be entirely safe.
  357.     
  358. ()    Extend 'matchIt' to cope with '/* ...  */' pairs as well as normal 
  359.     braces.
  360.  
  361. ()    Let a window scroll at least so that the end of the document is 
  362.     half-way up the window?  Currently the last line of text must lie at 
  363.     the very bottom of the window and this is disconcerting when typing a 
  364.     long latex file (one can of course just add a whole bunch of returns, 
  365.     but that shouldn't be necessary).
  366.  
  367. ()    When Alpha's memory is low, put up a warning dialog that you should quit
  368.     and restart.
  369.     
  370. ()    'getModifiers' opened up some new possibilities for interface routines, 
  371.     however, in a couple of places where I would like to use this, things 
  372.     are done directly with alpha and there are no Tcl proc's that we can 
  373.     hang modifications off of.  Specifically, neither of the function 
  374.     pop-up's allow you to dectect if a modifier key was held down, (you 
  375.     could then offer a different menu, say the structual marks vs.  the 
  376.     alphabetical mark recently introduced via toTclMarkFile).  Once a menu 
  377.     is presented, there is no way to detect that a choice has been made 
  378.     with a modifier key depressed, this would be useful to provide an 
  379.     automatic mark stack push (such a mechanism does work in the status 
  380.     line <mode> pop-up, if an option key is held while selecting an item 
  381.     there, the help file (if any exists) for that mode will be opened.
  382.     
  383. ()    It would be nice if matchIt could put on a little bit more of a display so 
  384.     you are better able to pick it up with your peripheral vission as you are 
  385.     typing. Maybe "halo' the matchIt position before flashing the character, 
  386.     or form a cross of hilited char positions (above and below, both sides) 
  387.     before flashing the matchIt character.
  388.     
  389.     
  390.           Fixed but not released.
  391.  
  392. Things which have been fixed in Alpha 8.0 (release date unknown)
  393.  
  394. ()    There's no way to know which application it was which replied to an
  395.     event which was passed to 'handleReply'.
  396.  
  397.     This limitation still exists in 'handleReply', but the '-Q <handlerProc>'
  398.     option to 'tclAE::send' permits unambiguous reply dispatching.
  399.     
  400. ()    There is currently no facility to get a list of eventHandlers which 
  401.     have been defined.
  402.  
  403. ()    Have a flag to allow reporting of errors which hit the top level.  
  404.     Currently such errors just vanish and you're left wondering what exactly 
  405.     did/didn't happen.  I.e. the user should be able to define a 'errorHook'
  406.     procedure which is called with such top-level errors.  (This is 
  407.     effectively the 'bgerror' feature of Tcl 8)
  408.  
  409. ()  'eval ... $args' where the last elment of args was
  410.     something like "} " converts the trailing space into a backslash.
  411.     This is a bug in Tcl 7.5, which has since been fixed.
  412.  
  413. ()    When saving large files, the window sometimes goes blank.  Cmd-L
  414.     brings the text back again (it's a visual problem only).  This
  415.     actually only occurred when you had 'update file header' active
  416.     in the document projects package and is due to a bug in replaceText.
  417.  
  418. ()    During status prompts, clicking in the scrollbar, or anything which 
  419.     doesn't actually affect the window shouldn't reset the status
  420.     prompt which it currently does.
  421.  
  422. ()    Implement find/replace in the current selection (there is a proc 
  423.     to do this in "procs.tcl", but far more convenient would be a check box 
  424.     in the standard find dialog box). (in supersearch)
  425.  
  426. ()    Move the replace-in-fileset facility to the standard find dialog as 
  427.     another option.  In fact why not combine this with the above 
  428.     suggestion and have a pop-up option menu with 'search this document' 
  429.     'search current selection' 'search entire fileset' as options, instead 
  430.     of the current 'multiple files' checkbox?  'Replace All' should replace 
  431.     all occurrences in the current selection/file, whilst for filesets this 
  432.     is rather drastic so I'd suggest there be another checkbox, which says 
  433.     'replace in all files' and changes the meaning of opt-cmd-R in that 
  434.     case. (in supersearch)
  435.  
  436. ()    If we have a menu item with a key-equivalent and a mark-charcter, 
  437.     like this: "!≠/=<Ineq", the 'item' sent to the menu proc is
  438.     not 'neq' as it should be, but rather '!≠neq'.  This is a bug.
  439.     
  440. ()    Cursor-key-bindings can't appear in menus.  More precisely the glyphs
  441.     for the arrow keys can appear, but the menu doesn't create the
  442.     appropriate binding for the keys, so the shortcut doesn't function.
  443.     A workaround is to define 'Bind ...' statements in addition to the
  444.     menu, but this is a bug.
  445.     
  446. ()  the GetTMarks list doesn't contain the duplicate window markers
  447.     <2>, <3> etc, as returned by [winNames -f].  This could be considered
  448.     a bug or a feature. 
  449.  
  450. ()    GetTMarks thinks non-file windows are in the '[pwd]' directory,
  451.     rather than in no directory at all.
  452.  
  453. ()    You can't make a menu with both menu-form-conversion and not, unless
  454.     you build it with 'addMenuItem ?-m?', but then you can't add dynamic
  455.     items or sub-menus.  What is needed is a code, like '&', to go in
  456.     the 'menu' command which says "don't convert this item".
  457.  
  458. ()  Error replies to 'dosc' are not always handled correctly:
  459.  
  460.     Welcome to Alpha's Tcl shell.
  461.     «Alpha ƒ» dosc -c 'WIsH' -s "file asfasf"
  462.     Error: Error: 1
  463.     «Alpha ƒ» dosc -c 'WIsH' -s "info asfasf"
  464.     Error: Error: bad option "asfasf": must be args, body, cmdcount, commands, 
  465.     complete, default, exists, globals, hostname, level, library, loaded, locals, 
  466.     nameofexecutable, patchlevel, procs, script, sharedlibextension, tclversion, 
  467.     or vars
  468.     «Alpha ƒ» 
  469.         
  470.     One might think this was a problem on 'WIsH's end of things, but 
  471.     if you replace the above by the equivalent 'AEBuild ...  misc dosc 
  472.     ...'  then it is clear the reply is correct.  Therefore Alpha is 
  473.     screwing up somewhere in 'dosc'. 
  474.  
  475. ()    The dialog command (i) fails when given a huge number of items in
  476.     more than 8 panes. (call 'global::allPrefs' to see this happen --
  477.     that's why the prefs have to be subdivided now). (ii) isn't
  478.     documented completely: '-n' option needs explaining.
  479.     
  480. ()    Also there's no command to disable an entire menu in one go.
  481.     
  482. ()    Furthermore, matchIt fails when matching the '{}' begin and end 'proc'
  483.     pair of a large function.  'balance' works still!  As a concrete
  484.     example, look at proc TeX::Completion::Cite.  matchIt has a built in 
  485.     default of 3000 char max to search, which has been worked around
  486.     in Alpha7.x.  Alpha 8.x has an unlimited default.
  487.  
  488. ()    Let 'diff' work on files with Unix eol's as well as just mac ones 
  489.     (it 'works', but treats the entire file as a one line).
  490.  
  491. ()    'dialog' doesn't cope with _very_ complex multi-page dialogs
  492.  
  493. ()  Menu names can't be longer than 24 chars.  Can be problematic
  494.     for filesets menu.  Maximum is now 31 chars (max length of a file
  495.     in MacOS at present).
  496.  
  497. ()    The optional parameter to 'matchIt' doesn't seem to have any effect
  498.     for me.  E.g. the following two procs (when bound to a key) both can
  499.     take up to 10 seconds to return in a large (200k) file.  Presumably the
  500.     first is only supposed to search 200 characters so should be quick.
  501.  
  502.     proc matchFast {} {
  503.         if ![catch {matchIt ")" [lineStart [getPos]] 200} paren] {
  504.             alertnote "yes"
  505.         } else {    
  506.             alertnote "no"
  507.         }
  508.     }
  509.     proc matchSlow {} {
  510.         if ![catch {matchIt ")" [lineStart [getPos]]} paren] {
  511.             alertnote "yes"
  512.         } else {    
  513.             alertnote "no"
  514.         }
  515.     }
  516.  
  517. ()    The 'time' command reports ticks not microseconds.  Ticks aren't 
  518.     much use (too coarse-grained)
  519.  
  520. ()  The string returned from any 'dialog ....' edit box is not 
  521.     appended to the result correctly.  The result should be a list
  522.     of items, but I guess 'append' rather than 'lappend' is used
  523.     internally.  Example: if a dialog has an edit-item as the
  524.     first item, and I enter '} then {' (to search for obsolete Tcl 
  525.     syntax), the string returned by dialog '{res1 res2 ...}' is 
  526.     actually '{} then { res2 ...}' which is obviously completely
  527.     wrong.  It should have been {{\} then \{} res2 ...}.  Alpha
  528.     should be using 'lappend' internally which will do all the
  529.     hard work of quoting the result for you.  I think the same
  530.     problem occurs with many of Alpha's standard dialogs.
  531.     
  532. ()    the '-c' menu option to ignore all meta-characters also ignores all 
  533.     sub-menus (or rather it puts some weird character in the menu and 
  534.     there is no sub-menu).
  535.  
  536. ()  rememberPatternHook is called without quoting its arguments correctly
  537.     This means the call fails if either search of replace string contain
  538.     unquoted '{' or '}'.  (see bug a few lines up for probable solution) 
  539.  
  540. ()     Add commands/options: (Vince _really_ wants these!)
  541.  
  542.     'GetTMarks ?-w win?'
  543.     'replaceText ?-w win? ...'
  544.     'getPosOfTMark ?-w win? name'
  545.     
  546. ()  'matchIt "\]" $pos' never works --- the ']' argument to matchIt 
  547.     isn't handled correctly; the proc always returns 'no match found'
  548.  
  549. ()    Menu key bindings to items which contain square brackets '[]' do not
  550.     work.  This is because the binding is evaluated, which tries to
  551.     evaluate the '[xxx]'.  When creating the menu item, the text should
  552.     have been surrounded by '{}'.  This is most often manifested in the
  553.     window menu, for which keyboard equivalents cmd-0-9 do not work if
  554.     a window's name contains square brackets.
  555.     (There is a pseudo-workaround for this in the Tcl code).
  556.     Again this is probably a problem with append vs lappend used 
  557.     internally.
  558.  
  559. ()    removeTMark doesn't seem to work
  560.  
  561. ()    Almost none of Alpha's file/glob/cd/... commands support aliases
  562.     This would be fixed with Tcl8.0
  563.     
  564. ()    grep, scanfile etc. basically fail on Unix format files: they think
  565.     any match is on the first line of the file.  This is especially
  566.     useless for batch searches in which every match is listed as being
  567.     on the first line.  Upgrading to Tcl 8 should help this!
  568.     
  569. ()    icGetPref has some problems (other problems listed below too): 
  570.  
  571.     «Alpha ƒ» icGetPref Helper•http
  572.     lG1MacLynxphervigator™ 3.0
  573.  
  574. ()    icGetPref on many items returns 'ic err: -670' which is the following 
  575.     error:
  576.     
  577.         icTruncatedErr = -670,    /* more data was present than was returned */
  578.     
  579.     This happens for 'DownloadFolder' for example (_many_ others too).
  580.         
  581. ()    posToRowCol doesn't deal with tabs.  Is this a bug or a 
  582.     feature?  Basically on a line beginning with a tab, I'd expect 
  583.     [posToRowCol $start] to be "X 0", and [posToRowCol [incr 
  584.     start]] to be "X 4" (or "X 8" or whatever).  
  585.     
  586.     To put this another way, 'posToRowCol [getPos]' does not have the same
  587.     value as the row/col indicator in the status bar. 
  588.   
  589. ()  If you have an untitled dirty window which is not at the front, and then 
  590.     use 'Save all', you will get a save dialog for the window at the front, not 
  591.     the untitled one behind.
  592.  
  593. ()    'regModeKeywords' colorizes keywords without regard to capitalizations, there 
  594.     are plenty of languages where capitalization is significant, it would be 
  595.     nice to have a switch to tell alpha not to ignore keyword capitalization.
  596.     
  597. ()    Let 'scanfile' etc.  work on files with Unix eol's as well 
  598.     as just mac ones (they 'work', but treat the entire file as a 
  599.     single line, which isn't too helpful).  Also 'gets' treats an 
  600.     entire file as a single line if it's delimited by '\n'.  I guess
  601.     these issues would be resolved by updating Alpha's Tcl core to 7.6/8.0.
  602.  
  603. ()    Adjusting tab-size/font should not dirty the window.
  604.     (There is a work-around for this in "coreFixes.tcl")
  605.         
  606. ()    There are numerous problems (small and large) with Alpha's moveFile
  607.     removeFile etc.  These will go away if Alpha upgrades to Tcl8.0.
  608.     Here's an example: let's say we have files '$a' and '$b' and
  609.     we wish to replace $a with $b.  Then we can't do it.
  610.     
  611.     removeFile $a ; moveFile $b $a   ;# gives 'unknown error'
  612.     moveFile $a ${a}~ ; moveFile $b $a ; removeFile ${a}~  ;# gives error
  613.  
  614. ()     Make the 'listpick' box width & height user configurable?
  615.  
  616. ()    The following line exhibits a bug in the auto-wrap feature of 
  617.     Alpha.  It occurs with any long line which contains no internal
  618.     space but does contain punctuation/braces.  (This actually occurs
  619.     quite frequently in latex 'equation' environments).  Move the 
  620.     cursor to somewhere near the end of the line and start typing (make 
  621.     sure the window isn't read only).  Blank lines are inserted 
  622.     before the given line!    
  623.     
  624.     ,asbafsafaskasd.jsasassdkasdas,d{adasdadhja}skasddaasdasasasasasasasaasas
  625.     
  626. ()    'puts stderr blah' brings up a SIOUX window and crashes Alpha.  Alpha 
  627.     should be linked with the sioux-stubs, so no sioux-code is linked in,
  628.     and these puts commands should be diverted to some Tcl proc equivalent.
  629.     (the procedure tclLog in "library.tcl" is a good standard alternative)
  630.     Vince can supply you with some C code which will divert stdio to
  631.     given tcl procedures.
  632.  
  633. ()    bringToFront doesn't work on window names which contain colons 
  634.     (unusual case I know)
  635.  
  636. ()    There is no way to get or set the font or font-size of a window from Tcl
  637.  
  638. ()    If a file is opened with a selection (say everything: cmd-A), 
  639.     then closed, and then the data-fork of the file is changed, so 
  640.     that it is shorter, on re-opening the file, the highlighting is 
  641.     v.  odd, and I had to redraw the window to fix it (ctrl-l).  
  642.     Alpha should probably check if highlighting runs past the end of 
  643.     the file.
  644.  
  645. ()    The interaction of the search dialog box with the 'grepfset' procedure
  646.     is incorrect:
  647.  # 
  648.  # "grepfset" --
  649.  # 
  650.  #  args: wordmatch ?-nocase? expression fileset
  651.  #  Obviously we ignore wordmatch
  652.  #  
  653.  #  If the 'Grep' box was set, then the search item is _not_ quoted.
  654.  #  
  655.  #  Non grep searching problems:
  656.  #  
  657.  #  If it wasn't set, then some backslash quoting takes place. 
  658.  #  (The chars: \.+*[]$^ are all quoted)
  659.  #  Unfortunately, this latter case is done incorrectly, so most
  660.  #  non-grep searches which contain a grep-sensitive character fail.
  661.  #  The quoting should use the equivalent of the procedure 'quote::Regfind'
  662.  #  but it doesn't quote () and perhaps other important characters.
  663.  #  
  664.  #  Even worse, if the string contained any '{' it never reaches this
  665.  #  procedure (there must be an internal error due to bad quoting).
  666.  # 
  667.  
  668. ()   Some of them seem to be caused by Alpha not using 
  669.      'lappend' internally when it should be (it often seems to use 'append' 
  670.     together with some inadequate quoting instead).  This causes big 
  671.     problems when characters like '[]{}' are involved.
  672.  
  673. ()    Cmd-double-clicking seems first to check if there is a ':' anywhere in the
  674.     non-whitespace surrounding the click position, and if so sends that text
  675.     off to Internet Config.  Unfortunately if IC doesn't think it is a URL 
  676.     (often the case since, for instance, TeX labels and Tcl procedure names
  677.     may contain colons) the standard 'CmdDblClick' procedure is never called.
  678.     In such a case the cmd-dbl-click is just lost. One way around this is to 
  679.     double-click to get the selection you want, and then invoke the 
  680.     CmdDblClick routine via its keybinding (default = F6).
  681.  
  682. ()    searching backwards for this regexp in a window can lock Alpha up
  683.     or crash with error 28 (stack hits heap):
  684.  
  685.         (/\*([^*]|[^*]\/|\*[^\/]|\r)*\*/|^\[ \t\]\t*\$)
  686.  
  687.     Vince can supply a 100% reproducible example of this if needed.
  688.     Minor variants on this regexp have the same problem.  This occurs
  689.     when using text::genericIndent when editing javascript code in
  690.     HTML pages.  I'm not sure what the search is seeing that causes
  691.     the problem.  (text::genericIndent has since been rewritten to
  692.     avoid this trouble). (Will be fixed with new regexp code)
  693.  
  694. ()  'regexp {\w} a' == 1, but 'regexp {[\w]} a' == 0, i.e. the \w only
  695.     matches if it isn't inside a range!  There are many other regexp problems.
  696.     This isn't quite right: regexp {[\w]} a == 0 , but regexp {[\w]+} a == 1.
  697.     Very weird.  (Will be fixed with new regexp code)
  698.  
  699. ()  Regexp's still have some problems:
  700.  
  701.     «Alpha ƒ» regsub -all {\W} {aaaaaa  aa} {Z} t
  702.     14
  703.     «Alpha ƒ» set t
  704.     aaaaaaZZaaZZZtZZZZgæZZézZDZÇZC0Z
  705.     «Alpha ƒ» 
  706.     
  707.     This used to give:
  708.     
  709.     «Alpha ƒ» regsub -all {\W} {aaaaaa  aa} {Z} t
  710.     7
  711.     «Alpha ƒ» set t
  712.     aaaaaaZZaaZZZtZZZ
  713.     
  714.     which is also wrong.
  715.     (Will be fixed with new regexp code)
  716.  
  717.           Half-fixed:
  718.  
  719. ()    when dealing with a menu with more than perhaps 20 items, Alpha won't
  720.     unconvert the menu-item when it is sent to the menu-proc.  So if I
  721.     build a menu with 'Menu -n Name -p my_proc {lots of items... thisOne}'
  722.     then 'thisOne' appears in the menu as 'This One' (as desired), but
  723.     when it is selected, the call is 'my_proc Name "This One"' which
  724.     is incorrect.  The menu items near the top of the menu work fine!
  725.     
  726. ()    There are many other problems with long menus: 'enableMenuItem'
  727.     doesn't work properly. i.e. enableMenuItem $m thisOne 0 will
  728.     say there's no item with that name, and enableMenuItem $m "This One" 
  729.     0 will not complain, but won't actually disable the item either!
  730.     (Fix only applies with MacOS 8.5 or newer, and ought to work,
  731.     except it seems there's a mercutio problem which means things
  732.     still don't work!)
  733.  
  734.